home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2.sit
/
Raven 1.2
/
Source
/
Foundation
/
OS
/
ZRegion.h
< prev
next >
Wrap
Text File
|
1996-10-28
|
4KB
|
148 lines
/*
* File: ZRegion.h
* Summary: RgnHandle wrapper.
* Written by: Jesse Jones
*
* Copyright ゥ 1996 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <-> 1/28/96 JDJ Created
*/
#pragma once
#include <QuickDraw.h>
#include <ZGeometry.h>
// ===================================================================================
// class TRegion
// ===================================================================================
class TRegion {
//-----------------------------------
// Initialization/Destruction
//
public:
~TRegion();
TRegion();
TRegion(const TRegion& rgn);
TRegion(RgnHandle rgn);
TRegion(const TRect& rect);
TRegion(const TPoint& pt, const TSize& size);
TRegion(const TPoint* vertices, short count);
// Builds a region from an array of count vertices.
//-----------------------------------
// Conversion operators
//
public:
operator RgnHandle() const {return mRgn;}
//-----------------------------------
// Assignment
//
public:
TRegion& operator=(const TRegion& rgn);
TRegion& operator=(const TRect& rect);
TRegion& operator+=(const TRegion& rgn);
TRegion& operator+=(const TRect& rect);
TRegion& operator+=(const TPoint& offset);
TRegion& operator-=(const TRegion& rgn);
TRegion& operator-=(const TRect& rect);
TRegion& operator-=(const TPoint& offset);
TRegion& operator&=(const TRegion& rgn);
TRegion& operator&=(const TRect& rect);
TRegion& operator^=(const TRegion& rgn);
TRegion& operator^=(const TRect& rect);
//-----------------------------------
// Arithmetic
//
public:
friend TRegion operator+(const TRegion& rgn1, const TRegion& rgn2);
friend TRegion operator+(const TRegion& rgn, const TRect& rect);
friend TRegion operator+(const TRect& rect, const TRegion& rgn);
friend TRegion operator-(const TRegion& rgn1, const TRegion& rgn2);
friend TRegion operator-(const TRegion& rgn, const TRect& rect);
friend TRegion operator-(const TRect& rect, const TRegion& rgn);
friend TRegion operator&(const TRegion& rgn1, const TRegion& rgn2);
friend TRegion operator&(const TRegion& rgn, const TRect& rect);
friend TRegion operator&(const TRect& rect, const TRegion& rgn);
friend TRegion operator^(const TRegion& rgn1, const TRegion& rgn2);
friend TRegion operator^(const TRegion& rgn, const TRect& rect);
friend TRegion operator^(const TRect& rect, const TRegion& rgn);
void MakeEmpty();
//-----------------------------------
// Moving
//
public:
friend TRegion operator+(const TRegion& rgn, const TPoint& offset);
friend TRegion operator-(const TRegion& rgn, const TPoint& offset);
void MoveTo(const TPoint& pt);
// Moves region so that origin is at pt.
//-----------------------------------
// Scaling
//
public:
void Inset(short dx, short dy) {::InsetRgn(mRgn, dx, dy);}
void Inset(const TPoint& delta) {::InsetRgn(mRgn, delta.h, delta.v);}
void Map(const TRect& srcRect, const TRect& dstRect);
// Scales the region by the ratio of the sizes of srTRect and
// dstRect. Also moves the region to a location within dstRect
// similiar to its position within srTRect.
//-----------------------------------
// Comparison
//
public:
friend bool operator==(const TRegion& rgn1, const TRegion& rgn2);
friend bool operator==(const TRegion& rgn, const TRect& rect);
friend bool operator==(const TRect& rect, const TRegion& rgn);
friend bool operator!=(const TRegion& rgn1, const TRegion& rgn2);
friend bool operator!=(const TRegion& rgn, const TRect& rect);
friend bool operator!=(const TRect& rect, const TRegion& rgn);
//-----------------------------------
// Inquiry
//
public:
bool IsEmpty() const {return EmptyRgn(mRgn);}
TRect GetEnclosingRect() const {return (**mRgn).rgnBBox;}
// Returns a rectangle completely enclosing the region.
bool Contains(const TPoint& pt) const {return ::PtInRgn(pt, mRgn);}
bool Intersects(const TRect& rect) const {return ::RectInRgn(rect, mRgn);}
//-----------------------------------
// Member data
//
private:
RgnHandle mRgn;
};